from info.models import User
from info.response_code import RET
from . import admin_bp
from flask import request, redirect, url_for, current_app, jsonify, render_template, session, g
from info.utils.common import user_login_data


@admin_bp.route('/user_count')
def user_count():
    render_template("admin/user_count.html")

# url :/admin/
@admin_bp.route("/", methods=["POST", "GET"])
@user_login_data
def admin_index():
    # 获取用户对象
    user = g.user
    data = {
        "user_info": user.to_dict()
    }
    return render_template("admin/index.html", data=data)


# url :/admin/login
@admin_bp.route("/login", methods=["POST", "GET"])
def login():
    if request.method == "GET":
        # 去 session 中取指定的值
        user_id = session.get("id", None)
        is_admin = session.get("is_admin", False)
        # 如果用户id存在，并且是管理员，那么直接跳转管理后台主页
        if user_id and is_admin:
            return redirect(url_for("admin_info.admin_index"))
        # 如果不是管理员或者用户不存在
        return render_template("admin/login.html")

    # 1.获取参数 用户账号username 用户密码password
    username = request.form.get("username")
    password = request.form.get("password")
    # 2.参数校验
    # 2.1非空判断
    if not all([username, password]):
        return render_template('admin/login.html', errmsg="参数不足")
    # 3.业务逻辑账号查询用户对象
    # 3.1 根据账号查询用户对象
    admin_user = None  # type:User
    try:
        admin_user = User.query.filter(User.mobile == username).first()
    except Exception as e:
        current_app.logger.error(e)
        return render_template('admin/login.html', errmsg="数据查询失败")
    if not admin_user:
        return render_template('admin/login.html', errmsg="用户不存在")
    # 3.2 密码校验
    if not admin_user.check_passowrd(password):
        return render_template('admin/login.html', errmsg="密码错误")
    # 3.3 权限校验
    if not admin_user.is_admin:
        return render_template('admin/login.html', errmsg="用户权限错误")

    # 3.3通过session保存 保存用户状态
    session["id"] = admin_user.id
    session["mobile"] = admin_user.mobile
    session["nick_name"] = admin_user.nick_name
    # 记录用户对象是否是管理员
    session["is_admin"] = True
    # 4.返回用户登录成功
    return redirect(url_for("admin_info.admin_index"))
